import { z } from "zod/v4"
import { getCookie } from 'h3'
import { languagesArr } from "./languages"
/**
 * 加载客户端语言环境配置到 Zod 验证库中。
 * @param {Object} event - 包含请求信息的事件对象，用于获取客户端语言环境。
 */
export async function loadLocale(event) {
  // 调用 getClientLocale 函数获取客户端的语言环境
  const locale = await getClientLocale(event)
  const language = () => {
      // 检查 languagesArr 是否为有效的数组
      if (!Array.isArray(languagesArr)) {
        return 'en'
      }
      // 在数组中查找匹配的语言
      const foundLang = languagesArr.find(lang => lang.code === locale);
      // 如果找到则返回语言代码，否则返回默认值 'en'
      return foundLang ? foundLang.code : 'en'
    }
  // 动态导入 Zod 验证库中对应语言的本地化配置文件
  const { default: lang } = await import(`zod/v4/locales/${language()}.js`)
  // 将导入的本地化配置应用到 Zod 验证库中
  z.config(lang())
}

/**
 * 从请求事件中获取客户端的语言环境。
 * 如果事件对象存在且包含请求信息，则尝试从 cookie 中获取 'i18n_redirected' 的值。
 * 如果未找到，则返回默认的 'en-GB'。
 * @param {Object} event - 包含请求信息的事件对象。
 * @returns {string} 客户端的语言环境或默认的 'en-GB'。
 */
export async function getClientLocale (event) {
  // 检查事件对象是否存在请求信息，并尝试从 cookie 中获取 'i18n_redirected' 的值
  // 如果不存在，则返回默认的 'en-GB'
  return  event?.node?.req && getCookie(event, 'i18n_redirected') || 'en-GB'
}
